import sys

sys.setrecursionlimit(10000000) #防止递归爆栈

def fun():
    n = int(input())
    s = input()
    s = s.split(' ')
    arr = []
    for i in range(n):
        arr.append(int(s[i]))

    ans = 0

    # index 最新的可以遍历的数组下标
    # tmp是数组，存储了所有选中的树的高度
    # tmp1是数组，存储了所有选中的树的数组下标
    def dfs(index, tmp, tmp1): #一个闭包的局部递归函数
        nonlocal ans
        ans = max(ans, len(tmp))
        if len(tmp) == 1: #如果只选了一棵树，就没有了对等间隔的要求
            for i1 in range(index + 1, n):
                if arr[i1] > tmp[-1]: #只需要树越来越高即可
                    tmp.append(arr[i1])
                    tmp1.append(i1)
                    dfs(i1, tmp, tmp1)
                    tmp.pop() #还原现场
                    tmp1.pop()
        else: #次数，间隔应该是确定的
            diff = tmp1[1] - tmp1[0] #下标做差得到间隔
            # next_count = n - index - 1 
            # # next_count // diff 是后续可以选的最多的数量的树
            # # 已经选的树的数量 len(tmp)
            # if next_count // diff + len(tmp) <= ans:  # 剪枝
            #     return
            next = index + diff #被等间隔限制了，只能选这颗树
            if next < n and arr[next] > tmp[-1]: #树木越来越高
                tmp.append(arr[next])
                tmp1.append(next)
                dfs(next, tmp, tmp1)
                tmp.pop()
                tmp1.pop()

    for i in range(n):
        dfs(i, [arr[i]], [i])
    print(ans)


if __name__ == '__main__': #dfs暴力搜索+剪枝
    fun()
